//Kéki
package digitrencer;

/**
 * A jelgenerátort megvalósító osztály.
 * @author Kéki
 */
public class Generator extends Input {

    private String sequence;
    private int position;

    Generator(int id, Wire[] inputs, Wire[] outputs) {
        super(id, inputs, outputs);
        sequence = "01";                  //default szekvencia
        position = 0;                     //default pozíció
        value = (sequence.charAt(0) == '1');
        System.out.println("CREATE | #"+id+":Generator | Generator(int id = "+id+", Wire[] inputs = [], "
                + "Wire[] outputs = [Wire#"+outputs[0].id+"])");
    }

    /**
     * Lekérdezi a jelgenerátor szekvenciáját.
     * @return A jelgenerátor szekvenciája.
     */
    public String getSeq() {
        System.out.println("CALL | #" + id + ":Generator | public String getSeq()");
        System.out.println("RETURN | #" + id + ":Generator | String seq = \"" + sequence + "\"");
        return sequence;
    }

    /**
     * Beállítja a jelgenerátor szekvenciáját.
     * @param seq A beállítani kívánt szekvencia, egy String formátumú 01-sorozat.
     */
    public void setSeq(String seq) {
        System.out.println("CALL | #" + id + ":Generator | public void setSeq(\"" + seq + "\")");
        sequence = seq;
    }

    /**
     * Eggyel lépteti a jelgenerátort. A jelgenerátor által kiadott érték ezután a szekvencia következő bitje lesz.
     */
    public void step() {
        System.out.println("CALL | #" + id + ":Generator | public void step()");
        position++;                                                                 //pozíció növelése
        if (sequence.length()==position) position=0;                                //Ha elértünk a szekvencia végére, előlről kezdjük.
        value = (sequence.charAt(position) == '1');
    }

    /**
     * Alapállapotba állítja a jelgenerátort. A jelgenerátor által kiadott érték ezután a szekvencia első bitje lesz.
     */
    public void reset() {
        System.out.println("CALL | #" + id + ":Generator | public void reset()");
        position = 0;
        value = (sequence.charAt(0) == '1');
    }
}